/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * ModificarMiemGrupo.java
 *
 * Created on 01-sep-2011, 12:08:39
 */
package Ventanas;

import Objetos.PropiedadesIP;
import Proxies.CtrlModifMiembrosGrupoWS;
import Proxies.CtrlModifMiembrosGrupoWSService;
import Proxies.CtrlUsuariosWS;
import Proxies.CtrlUsuariosWSService;
import Proxies.DataGrupoArray;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.xml.namespace.QName;

/**
 *
 * @author Sebas
 */
public class ModificarMiemGrupo extends javax.swing.JFrame {

    /** Creates new form ModificarMiemGrupo */
   
     CtrlModifMiembrosGrupoWS ctrlModifMiembros;
    CtrlUsuariosWS ctrlUsu; 
    
    private void actualizarTablaUsuarios(){
        
        jLabel5.setVisible(false);
        
        Object [] fila = new Object[3];
        
        Iterator<Proxies.DataUsuario> itera = ctrlUsu.listaUsuarios().getItem().iterator();
        Proxies.DataUsuario usr;
        DefaultTableModel model = new DefaultTableModel();
        JTable_buscarUsr.setModel(model);
        model.addColumn("Nick");
        model.addColumn("Email");
        model.addColumn("Nombre");
        
        JTable_buscarUsr.setRowSelectionAllowed(true);
        JTable_buscarUsr.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        
        if (ctrlUsu.listaUsuarios().getItem().isEmpty()){
            jLabel5.setText("NO EXISTEN USUARIOS EN EL SISTEMA AUN!!");
            jLabel5.setVisible(true);
        }
        
        String grupoElegido = "";
        
        if (!ctrlModifMiembros.listarGrupos().getItem().isEmpty())
            grupoElegido = jComboBox_Grupos.getSelectedItem().toString();
        
        while (itera.hasNext()){
            usr = itera.next();
            if (!ctrlModifMiembros.listarGrupos().getItem().isEmpty()){
                if (!ctrlModifMiembros.perteneceMiembroAgrupo(usr.getCorreo(), grupoElegido)){
                    fila[0] = usr.getNick();
                    fila[1] = usr.getCorreo();
                    fila[2] = usr.getNombre();
                    model.addRow(fila);
                }
            }
            else{
                fila[0] = usr.getNick();
                fila[1] = usr.getCorreo();
                fila[2] = usr.getNombre();
                model.addRow(fila);
            }
        }
        
        if (ctrlModifMiembros.listarGrupos().getItem().isEmpty()){
            Jbtn_agregarUsuario.setEnabled(false);
            Jbtn_quitarUsuario.setEnabled(false);
            Jbtn_confirmar.setEnabled(false);
        }
        
    }
    
    private void actualizarGrupos(){
        
        DataGrupoArray grupos = ctrlModifMiembros.listarGrupos();
        if (grupos.getItem().isEmpty())
            jComboBox_Grupos.addItem("No hay grupos en el sistema");
        else{
            
            for (int i = 0;i<grupos.getItem().size();i++){
                jComboBox_Grupos.addItem(grupos.getItem().get(i).getNombre());
            }
            
        }
        
    }
    
    private void actualizarTablaGrupo(){
        
        if (!ctrlModifMiembros.listarGrupos().getItem().isEmpty()){
            
            Iterator<Proxies.DataUsuario> itera = ctrlModifMiembros.listarDusuariosGrupo(jComboBox_Grupos.getSelectedItem().toString()).getItem().iterator();
            Proxies.DataUsuario usr;
            Object [] fila = new Object[3];

            DefaultTableModel model = new DefaultTableModel();
            JTable_miembrosGrupo.setModel(model);
            model.addColumn("Nick");
            model.addColumn("Email");
            model.addColumn("Nombre");
            JTable_miembrosGrupo.setRowSelectionAllowed(true);
            JTable_miembrosGrupo.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

            while (itera.hasNext()){
                usr = itera.next();
                fila[0] = usr.getNick();
                fila[1] = usr.getCorreo();
                fila[2] = usr.getNombre();
                model.addRow(fila);
            }
            
        }
        
        
    }
    
    public ModificarMiemGrupo() {
        initComponents();
        
        PropiedadesIP props = PropiedadesIP.getInstance();
        String IP = props.getServidorCentralIP();
        URL dirUsr = null;
        try {
            dirUsr = new URL(IP + "CtrlUsuarios?wsdl");
        } catch (MalformedURLException ex) {
            Logger.getLogger(ModificarMiemGrupo.class.getName()).log(Level.SEVERE, null, ex);
        }
        QName qNaUsr = new QName("http://WebServices/", "CtrlUsuariosWSService");
        ctrlUsu = new CtrlUsuariosWSService(dirUsr, qNaUsr).getCtrlUsuariosWSPort();
        
        URL dirModif = null;
        try {
            dirModif = new URL(IP + "CtrlModificarMiembrosGrupo?wsdl");
        } catch (MalformedURLException ex) {
            Logger.getLogger(ModificarMiemGrupo.class.getName()).log(Level.SEVERE, null, ex);
        }
        QName qNaModif = new QName("http://WebServices/", "CtrlModifMiembrosGrupoWSService");
        ctrlModifMiembros = new CtrlModifMiembrosGrupoWSService(dirModif, qNaModif).getCtrlModifMiembrosGrupoWSPort();
        
        actualizarGrupos();
        actualizarTablaUsuarios();
        actualizarTablaGrupo();
        
    }
        

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        Jbtn_confirmar = new javax.swing.JButton();
        Jbtn_cancelar = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();
        Jbtn_agregarUsuario = new javax.swing.JButton();
        Jbtn_quitarUsuario = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        JTable_buscarUsr = new javax.swing.JTable();
        JTextField_BuscarUsuario = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        JTable_miembrosGrupo = new javax.swing.JTable();
        jComboBox_Grupos = new javax.swing.JComboBox();
        jLabel6 = new javax.swing.JLabel();

        addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                formKeyPressed(evt);
            }
        });
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jLabel1.setText("RED - AGREGAR/QUITAR PARTICIPANTES DEL GRUPO");
        getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(310, 40, -1, -1));

        jLabel2.setText("Usuarios del Sistema");
        getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(60, 120, -1, -1));

        Jbtn_confirmar.setText("Confirmar");
        Jbtn_confirmar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Jbtn_confirmarMouseClicked(evt);
            }
        });
        getContentPane().add(Jbtn_confirmar, new org.netbeans.lib.awtextra.AbsoluteConstraints(720, 310, -1, -1));

        Jbtn_cancelar.setText("Cancelar");
        Jbtn_cancelar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Jbtn_cancelarMouseClicked(evt);
            }
        });
        getContentPane().add(Jbtn_cancelar, new org.netbeans.lib.awtextra.AbsoluteConstraints(630, 310, -1, -1));

        jLabel3.setText("Usuarios del grupo");
        getContentPane().add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(630, 120, -1, -1));

        Jbtn_agregarUsuario.setText(">>");
        Jbtn_agregarUsuario.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Jbtn_agregarUsuarioMouseClicked(evt);
            }
        });
        getContentPane().add(Jbtn_agregarUsuario, new org.netbeans.lib.awtextra.AbsoluteConstraints(400, 190, -1, -1));

        Jbtn_quitarUsuario.setText("<<");
        Jbtn_quitarUsuario.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Jbtn_quitarUsuarioMouseClicked(evt);
            }
        });
        getContentPane().add(Jbtn_quitarUsuario, new org.netbeans.lib.awtextra.AbsoluteConstraints(400, 220, -1, -1));

        JTable_buscarUsr.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nick", "Email", "Nombre"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(JTable_buscarUsr);

        getContentPane().add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 180, 327, 92));

        JTextField_BuscarUsuario.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JTextField_BuscarUsuarioActionPerformed(evt);
            }
        });
        JTextField_BuscarUsuario.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                JTextField_BuscarUsuarioPropertyChange(evt);
            }
        });
        JTextField_BuscarUsuario.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                JTextField_BuscarUsuarioKeyPressed(evt);
            }
            public void keyReleased(java.awt.event.KeyEvent evt) {
                JTextField_BuscarUsuarioKeyReleased(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                JTextField_BuscarUsuarioKeyTyped(evt);
            }
        });
        getContentPane().add(JTextField_BuscarUsuario, new org.netbeans.lib.awtextra.AbsoluteConstraints(270, 150, 133, -1));
        JTextField_BuscarUsuario.getAccessibleContext().setAccessibleDescription("adsja");

        jLabel4.setText("Buscar");
        getContentPane().add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(210, 150, -1, -1));

        jLabel5.setText("jLabel5");
        getContentPane().add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(69, 329, -1, -1));

        JTable_miembrosGrupo.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nick", "Mail", "Nombre"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane2.setViewportView(JTable_miembrosGrupo);

        getContentPane().add(jScrollPane2, new org.netbeans.lib.awtextra.AbsoluteConstraints(470, 180, 330, 100));

        jComboBox_Grupos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox_GruposActionPerformed(evt);
            }
        });
        getContentPane().add(jComboBox_Grupos, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 60, -1, -1));

        jLabel6.setText("Seleccionar grupo del sistema:");
        getContentPane().add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 60, -1, -1));

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void JTextField_BuscarUsuarioKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTextField_BuscarUsuarioKeyPressed
        // TODO add your handling code here:
        
        
    }//GEN-LAST:event_JTextField_BuscarUsuarioKeyPressed

    private void formKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_formKeyPressed
        // TODO add your handling code here:
        
    }//GEN-LAST:event_formKeyPressed

    private void Jbtn_cancelarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_Jbtn_cancelarMouseClicked
        // TODO add your handling code here:
        this.setVisible(false);
    }//GEN-LAST:event_Jbtn_cancelarMouseClicked

    private void JTextField_BuscarUsuarioPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_JTextField_BuscarUsuarioPropertyChange
        // TODO add your handling code here:
        
    }//GEN-LAST:event_JTextField_BuscarUsuarioPropertyChange

    private void JTextField_BuscarUsuarioKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTextField_BuscarUsuarioKeyTyped
        // TODO add your handling code here:
        
    }//GEN-LAST:event_JTextField_BuscarUsuarioKeyTyped

    private void JTextField_BuscarUsuarioKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_JTextField_BuscarUsuarioKeyReleased
        // TODO add your handling code here:
        
        TableModel modelo = JTable_buscarUsr.getModel();
        final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(modelo);
        JTable_buscarUsr.setRowSorter(sorter);
        String text = JTextField_BuscarUsuario.getText();
        if (text.length() == 0) {
          sorter.setRowFilter(null);
        } else {
          sorter.setRowFilter(RowFilter.regexFilter(text));
        }
        
        
    }//GEN-LAST:event_JTextField_BuscarUsuarioKeyReleased

private void Jbtn_agregarUsuarioMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_Jbtn_agregarUsuarioMouseClicked
// TODO add your handling code here:
    //no verifica si ya agregaste el usuario al grupo 
    String nom, nick, mail;
    nick=(JTable_buscarUsr.getValueAt(JTable_buscarUsr.getSelectedRow(), 0)).toString();
    mail=(JTable_buscarUsr.getValueAt(JTable_buscarUsr.getSelectedRow(), 1)).toString();
    nom=(JTable_buscarUsr.getValueAt(JTable_buscarUsr.getSelectedRow(), 2)).toString();
    int fila = JTable_buscarUsr.getSelectedRow();


    DefaultTableModel model = (DefaultTableModel) JTable_miembrosGrupo.getModel();
    DefaultTableModel model2 = (DefaultTableModel) JTable_buscarUsr.getModel();

    Object [] p = new Object[3];
    p[0]= nick;
    p[1]= mail;
    p[2]= nom;

    model.addRow(p);
    model2.removeRow(fila);

}//GEN-LAST:event_Jbtn_agregarUsuarioMouseClicked

private void Jbtn_quitarUsuarioMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_Jbtn_quitarUsuarioMouseClicked
// TODO add your handling code here:
     
    String nom, nick, mail;
    nick=(JTable_miembrosGrupo.getValueAt(JTable_miembrosGrupo.getSelectedRow(), 0)).toString();
    mail=(JTable_miembrosGrupo.getValueAt(JTable_miembrosGrupo.getSelectedRow(), 1)).toString();
    nom=(JTable_miembrosGrupo.getValueAt(JTable_miembrosGrupo.getSelectedRow(), 2)).toString();
    int fila = JTable_miembrosGrupo.getSelectedRow();


    DefaultTableModel modelMiembros = (DefaultTableModel) JTable_miembrosGrupo.getModel();
    DefaultTableModel modelUsuarios = (DefaultTableModel) JTable_buscarUsr.getModel();


    Object [] p = new Object[3];
    p[0]= nick;
    p[1]= mail;
    p[2]= nom;

    modelUsuarios.addRow(p);
    modelMiembros.removeRow(fila);
    
}//GEN-LAST:event_Jbtn_quitarUsuarioMouseClicked

private void JTextField_BuscarUsuarioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JTextField_BuscarUsuarioActionPerformed
    // TODO add your handling code here:
        
    
}//GEN-LAST:event_JTextField_BuscarUsuarioActionPerformed

private void Jbtn_confirmarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_Jbtn_confirmarMouseClicked
    // TODO add your handling code here:
    
    for (int i = 0;i<JTable_miembrosGrupo.getRowCount();i++){
        
        if (!ctrlModifMiembros.perteneceMiembroAgrupo(
                JTable_miembrosGrupo.getValueAt(i, 1).toString(),
                jComboBox_Grupos.getSelectedItem().toString())){
            
            ctrlModifMiembros.agregarMiembroGrupo(
                    jComboBox_Grupos.getSelectedItem().toString(), 
                    JTable_miembrosGrupo.getValueAt(i, 1).toString());
        }
        
    }
     
    
    JOptionPane.showMessageDialog(null, "Se han modificado los usuarios del grupo", "Miembros del grupo modificados", JOptionPane.INFORMATION_MESSAGE);
        
        
        
}//GEN-LAST:event_Jbtn_confirmarMouseClicked

private void jComboBox_GruposActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBox_GruposActionPerformed
    // TODO add your handling code here:
    actualizarTablaGrupo();
    actualizarTablaUsuarios();
}//GEN-LAST:event_jComboBox_GruposActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new ModificarMiemGrupo().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTable JTable_buscarUsr;
    private javax.swing.JTable JTable_miembrosGrupo;
    private javax.swing.JTextField JTextField_BuscarUsuario;
    private javax.swing.JButton Jbtn_agregarUsuario;
    private javax.swing.JButton Jbtn_cancelar;
    private javax.swing.JButton Jbtn_confirmar;
    private javax.swing.JButton Jbtn_quitarUsuario;
    private javax.swing.JComboBox jComboBox_Grupos;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    // End of variables declaration//GEN-END:variables
}